The probability density function for pareto is: pareto.pdf(x, b) = b / x ** (b+1) for x >= 1, b > 0.
pareto takes b as a shape parameter.
The probability density above is defined in the “standardized” form. To shift and/or scale the distribution use the loc and scale parameters. Specifically, pareto.pdf(x, b, loc, scale) is identically equivalent to pareto.pdf(y, b) / scale with y = (x - loc) / scale.
In [1]:
#импортирование необходимых библиотек
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as sts
from math import sqrt
%matplotlib inline
In [2]:
# зададим случайную величину по закону двойного распределения Вейбулла
#параметры распределения
k = 4.0
xm = 3.0
#frozen distribution
distributionRv = sts.pareto(k, loc=0, scale=xm)
# сгенерируем 1000 значений
distributionSample = distributionRv.rvs(1000)
#проверка задания распределения
print 'Theoretical mean: ', distributionRv.mean()
print 'Theoretical standard deviation: ', distributionRv.std()
In [3]:
#гистограмма выборки
plt.hist(distributionSample, bins=30, normed=True, label='Sample pdf')
#теоретическая плотность распределения
x = np.linspace(0,20,1000)
pdf = distributionRv.pdf(x)
plt.plot(x, pdf, label='Theoretical pdf')
plt.legend()
plt.grid()
plt.axis([0, 10, 0, 1.5])
plt.title('Pareto probability distribution function')
plt.xlabel('x')
plt.ylabel('pdf')
Out[3]:
In [4]:
#количество выборок
sampleNum = 1000
#массив объёма выборок
sampleVolume = [5, 10, 50]
#массив под выборочное среднее значение, заполненный нулями
distributionSamples = np.zeros( (len(sampleVolume), sampleNum) )
#вычисление выборочных средних значений и занесение в массив
for i in xrange( len(sampleVolume) ):
for j in xrange(sampleNum):
distributionSampleTemp = np.array( sts.pareto.rvs(k, loc=0, scale=xm, size=sampleVolume[i]) )
distributionSampleTempMean = distributionSampleTemp.mean()
distributionSamples[i, j] = distributionSampleTempMean
print distributionSamples
In [5]:
#гистограммы выборки
for i in xrange( len(sampleVolume) ):
plt.hist(distributionSamples[i], bins=30, normed=True)
plt.grid()
plt.axis([2, 8, 0, 2.5])
plt.title('Pareto probability distribution function for n = ' + str(sampleVolume[i]))
plt.xlabel('x')
plt.ylabel('pdf')
plt.show()
for i in xrange( len(sampleVolume) ):
plt.hist(distributionSamples[i], bins=30, normed=True, label='n = ' + str(sampleVolume[i]))
plt.grid()
plt.axis([2, 8, 0, 2.5])
plt.title('Pareto probability distribution function')
plt.legend()
plt.xlabel('x')
plt.ylabel('pdf')
In [6]:
#Математическое ожидание и дисперсия
distributionSampleMean = k * xm / (k - 1)
distributionSampleVariance = np.zeros( len(sampleVolume) )
for i in xrange( len(sampleVolume) ):
distributionSampleVariance[i] = xm**2 * k / ( (k - 1)**2 * (k - 2) ) / sampleVolume[i]
print 'Математическое ожидание: ' + str(distributionSampleMean)
for i in xrange( len(sampleVolume) ):
print 'Дисперсия для n = ' + str(sampleVolume[i]) + ': ' + str(distributionSampleVariance[i])
In [7]:
#гистограммы выборки
for i in xrange( len(sampleVolume) ):
plt.hist(distributionSamples[i], bins=30, normed=True)
plt.grid()
plt.axis([2, 8, 0, 2.5])
plt.title('Pareto probability distribution function for n = ' + str(sampleVolume[i]))
plt.xlabel('x')
plt.ylabel('pdf')
# зададим нормально распределенную случайную величину
mu = distributionSampleMean
sigma = sqrt(distributionSampleVariance[i])
normRv = sts.norm(loc=mu, scale=sigma)
x = np.linspace(-10,10,1000)
pdf = normRv.pdf(x)
plt.plot(x, pdf)
plt.show()
for i in xrange( len(sampleVolume) ):
plt.hist(distributionSamples[i], bins=30, normed=True, label='n = ' + str(sampleVolume[i]))
plt.grid()
plt.axis([2, 8, 0, 2.5])
plt.title('Pareto probability distribution function')
plt.legend()
plt.xlabel('x')
plt.ylabel('pdf')
# зададим нормально распределенную случайную величину
mu = distributionSampleMean
sigma = sqrt(distributionSampleVariance[i])
normRv = sts.norm(loc=mu, scale=sigma)
x = np.linspace(-10,10,1000)
pdf = normRv.pdf(x)
plt.plot(x, pdf)